//Set语法 类似于数组 object 其中的值都是唯一的（全等）
const set = new Set()  //创建方式一
set.add(2) // 新增对应的数据
set.add(3)
set.add(4)
console.log(set)

var arr = [1,1,22,2,33,33,44,44444,55,55]
const set2 = new Set(arr) //创建方式二
console.log(set2)

const set3 =new Set();
arr.forEach(element => {
    set3.add(element)
});
console.log(set3)

//map 类似于对象 object

// ES5 数据结构 Array Object

// size 长度 去重后的长度

//delete() 删除
set3.delete(44)
console.log(set3)

// clear() 清除所有 

//判断是否包含某元素
set.has(1)

// 数组去重
var arr = [12,3,4,-2,5,6,0,6,7,7,,8,8,,8,,6,5,0,54]
console.log([...new Set(arr)]) // 将set转为数组
var arr2 = new Set([12,3,4,-2,5,6,0,6,7,7,,8,8,,8,,6,5,0,54]);
[...arr2]; // 将set转化为数组

// 转为数组 Array.from()
var arr2 = new Set([12,3,4,-2,5,6,0,6,7,7,,8,8,,8,,6,5,0,54]);
var arr3 = Array.from(arr2)

// 循环 for of   for in
// for of 一种新的循环方式 ，可以遍历：Array string set map  ---- (原理：利用iterator方法来遍历) 不容易遍历对象，因为对象不包含iterator
// for in 
var obj = { name:'do',age:20}
for(var v in obj){
    console.log(v,obj[v]) // v 是属性，obj[v] 属性值
}

var arr = [1,2,3,4,5]
for(var v in arr){
    console.log(v) // v 索引
}
for(var v of arr){
    console.log(v) // 值
}

// set keys() value() entries()
var arr4= new Set([12,3,4,-2,5,6,0,6,7,7,,8,8,,8,,6,5,0,54]);
for(let v of arr4.entries()){
    console.log(v) // 键值对
}
for(let v of arr4.keys()) // 键
{
    console.log(v)
}
for(let v of arr4.values()){
    console.log(v)
}

// 过滤数据
//获取所大于3的值
var a = [1,23,4,12,4,5,62,32,2,234,5,1,2,4].filter(function(item,index){
    return item > 3;
});
console.log(a)

// 获取交集
var arr1 = new Set([1,2,3,4,5,6,7,8,9,10])
var arr2 = new Set([3,6,9])
var arr3 = new Set([...arr1].filter(item=>arr2.has(item)))
console.log(arr3)

// 获取并集
var arr4 = new Set([...arr1,...arr2])

// 获取差集
var arr5 = new Set([...arr1].filter(item=>{
    !arr2.has(item)
}))